Keyword: Kotlin Multiplatform Mobile
(在每篇的開頭會標註這篇的重點內容與技術,讓大家更有印象,已經很熟悉了就請直接跳過吧)
(另外由於Kotlin Multiplatform Mobile的架構上比較複雜,所以我也會每隔一段落將專案放在這個區塊)
Kotlin Multiplatform Mobile(簡稱KMM),是Kotlin官方Jetbrain所推出的一套跨平台框架,最大程度地利用
Kotlin的跨平台特性,達到公用大部分程式碼的效益.至於有些平台才獨有的特性,例如畫面的呈現,藍芽或GPS的功能,也能利用特殊的語法,讓各自平台獨立實現獨有的特色.
這樣直接講大概還是矇矇懂懂的,讓我們從實例開始...
現在想要做一個App,可以播放用戶Youtube上的播放清單...
流程大概如下:
iOS:登入用戶的Youtube帳戶 ->取得播放清單 ->顯示在iPhone畫面上 ->用戶播放
Android:登入用戶的Youtube帳戶 ->取得播放清單 ->顯示在Android畫面上 ->用戶播放
有注意到嗎?前面登入 "登入用戶的Youtube帳戶 ->取得播放清單"
不管哪個平台,這段是重複的,但由於平台不同,所以要分別寫兩次.
所以藉由KMM的協助,我們可以將"登入用戶的Youtube帳戶 ->取得播放清單" 的流程共用同一份Code
而最後顯示內容的部分,iOS可能使用獨有的tableView ,而Android可以使用RecyclerView,由於各平台的畫面
差距過於巨大,並且是使用者最容易受到影響的部分,所以仍然交還給各平台自己實作.
官方的架構圖上可以很清楚地看到,View層的部分由各平台的原Code實作,下方的商業邏輯等等的部分則是共用.
而如果有要使用特別的平台Api,仍然可以依據各平台來定義(下方的綠色部分).在實現共用的同時,也提供了很大的自由度.
Kotlin官方是怎麼做到這件事的呢? 就算因為Kotlin 以JVM為底,繼承了Java "一次編譯,處處執行"的特性,
iOS的裝置上可沒有JVM呢.
原來,官方在編譯的過程中做了手腳,補上了一層"翻譯".就是中間的"Kotlin/JVM" "Kotlin/Native"
"Kotlin/JS",把Kotlin翻譯成各平台原生的語言, 讓就算沒有JVM的環境,也能認得Kotlin 的code,而這個翻譯官,是根據每個平台來特製,也因此KMM目前支援的只有iOS與Android,而Javascript的版本還正在開發中,相信在不久的未來我們就能使用到WEB版的KMM啦
優點
1.一份底層的code可以共用,節省開發能量.
2.可以自然而然的利用架構解耦,有些時候明知這邊需要使用架構的特性,但是因為沒有明顯的危害,有些開發者就會不遵循架構開發,使用快解來方便行事,久而久之Code Space的品質就會下降,而在KMM架構裡面,由於底層強制要求是pure kotlin,所以減少了許多胡亂使用的可能.
3.最重要的是,大部分的跨平台框架都會面臨的一個問題:"改版".不管是iOS或是Android,每年都有大改版,通常這時候會推出新特性,新UI,新元件等等,而一般的跨平台框架就必須等到框架官方開發出新版本,才可以使用這些特性或功能.而KMM因為保留了一部分的原生的彈性,因此可以像是原生一樣直接使用.
缺點
1.可以共用的部分相較其他跨平台框架來說稍微少一點,以商業邏輯以及資料面的的部分居多,有些時候還是要為各平台特製一些區塊.
2.仍然要寫部分的原生Code,尤其是畫面的部分.
3.編譯時間拉長,為了將Kotlin Code轉換成各平台的原生Code ,需要花費額外時間.
瞭解了KMM ,明天會進入KMM的架構介紹!